A.6.1. Representation of All-Day Events in vCalendar/iCalendar
The vCalendar 1.0 specification, which is widely adopted on mobile devices, does not describe a standard representation of all day events.
The OMA data synchronisation group has published a Minimum Interoperability Profile vObject which aims to provide guidance on how to interpret some ambiguous areas of the vCalendar 1.0 specification.
It recommends that all-day events should be represented using the same date for DTSTART
and DTEND
, with a time of 00:00:00 for DTSTART
and 24:00:00 for DTEND
. 24 hour events that begin at midnight should be represented using DTSTART
and DTEND
time of 00:00:00 and DTEND
set to one day after the event. However, a time value of 24:00:00 is illegal syntax in iCalendar; the valid range for the hour value is 0 through 23.
The iCalendar specification states that the DTEND
property is exclusive (i.e. the date specified in the DTEND
is not included in the event duration). An event that lasts all day on June 19th 2007 should be represented as:
DTSTART;VALUE=DATE:20070619 DTSTART;VALUE=DATE:20070620
Most major Calendar implementations follow this guidance. For example, Microsoft Outlook:
BEGIN:VCALENDAR PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN VERSION:2.0 METHOD:PUBLISH BEGIN:VEVENT ORGANIZER:MAILTO:< omitted > DTSTART;VALUE=DATE:20070402 DTEND;VALUE=DATE:20070403 LOCATION:London office TRANSP:OPAQUE SEQUENCE:0 UID:040000008200E00074C5B7101A82E00800000000E0F088CC1875C7010000000000 000000100000008863E35F4A64624397C17A75BF6F4C4A DTSTAMP:20070402T101937Z SUMMARY:MS all day event\, time PRIORITY:5 CLASS:PUBLIC END:VEVENT END:VCALENDAR
For example, Google™:
BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VEVENT DTSTART;VALUE=DATE:20070404 DTEND;VALUE=DATE:20070405 < additional properties omitted for readability > STATUS:CONFIRMED SUMMARY:Birthday TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR